package com.jinyang.jetpackdemo.util

import android.os.Debug
import com.blankj.utilcode.util.ThreadUtils
import com.blankj.utilcode.util.ThreadUtils.SimpleTask
import java.text.DateFormat
import java.text.SimpleDateFormat
import java.util.*


/**
 * startMethodTracing是不采样的 所以在操作会产生大量的数据
 * 导致缓存区会一下就满了 所以该方法建议该方法针对在一个方法中调用
 *
 * 最好放到线程或者协程里，在主线程操作会非常卡
 * 存储位置在：/mnt/sdcard/Android/data/youPackageName/files
 */
fun startMethodTracing(
    traceFileName: String = getTraceFileName(),
    bufferSize: Int = 16 * 1024 * 1024,
    flags: Int = 0
) {
    ThreadUtils.executeByIo(object : SimpleTask<Any?>() {
        @Throws(Throwable::class)
        override fun doInBackground(): Any? {
            Debug.startMethodTracing(traceFileName, bufferSize, flags);
            return null
        }

        override fun onSuccess(result: Any?) {
        }
    })
}

/**
 * startMethodTracingSampling采用的采样的模式 可以再整个activity的生命周期中使用
 */
fun startMethodTracingSampling(
    traceFileName: String = getTraceFileName(),
    bufferSize: Int = 16 * 1024 * 1024,
    intervalUs: Int = 10
) {
    Debug.startMethodTracingSampling(traceFileName, bufferSize, intervalUs);
}

private fun getTraceFileName(): String {
    val dateFormat: DateFormat = SimpleDateFormat("yyyy_MM_dd_hh_mm_ss", Locale.getDefault())
    val logDate: String = dateFormat.format(Date())
    return "sample-$logDate"
}

fun stopMethodTracing() {
    Debug.stopMethodTracing()
}
